package com.neudu.yiyang.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.neudu.yiyang.utils.FLAGS;
import com.neudu.yiyang.utils.RedisUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class TokenUtils {
    @Resource
    private RedisUtils redisUtils;

    // 修改：接收 userId 参数，将其存入 Token 负载
    public String getToken(Integer userId) {
        Algorithm algorithm = Algorithm.HMAC256(getSecretKey()); // 使用密钥生成算法
        String token = JWT.create()
                .withClaim("userId", userId) // 关键：添加用户 ID 到 Token 负载
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 3)) // 3小时过期
                .sign(algorithm); // 使用算法签名

        // 可选：将 Token 与用户 ID 存入 Redis（用于刷新或黑名单）
        redisUtils.set(token, userId.toString());
        redisUtils.expire(token, FLAGS.REDIS_OUTOF_TIME); // 设置 Redis 过期时间与 Token 一致
        return token;
    }

    public String getSecretKey() {
        return "1231321321564654"; // 建议从配置文件读取，而非硬编码
    }
}